package com.mondo.financialwallet.data.repository.datasource;



import com.mondo.financialwallet.data.entity.BasisResponseEntity;
import com.mondo.financialwallet.data.entity.HoldProductDetailsEntity;
import com.mondo.financialwallet.data.entity.HoldProductListEntity;
import com.mondo.financialwallet.data.entity.HoldProductProfitDataEntity;
import com.mondo.financialwallet.data.entity.LoginUserInfoEntity;
import com.mondo.financialwallet.data.entity.ProductListEntity;
import com.mondo.financialwallet.data.entity.ProductOrderListEntity;
import com.mondo.financialwallet.data.entity.UserAssetsEntity;
import com.mondo.financialwallet.data.entity.UserInfoEntity;

import java.io.File;

import io.reactivex.Observable;

public interface DefaultDataStore {

    /**
     * 用户详情
     */
    Observable<UserInfoEntity> userDetails();

    /**
     * 用户资产
     */
    Observable<UserAssetsEntity> userAssets();

    /**
     * 修改头像
     */
    Observable<BasisResponseEntity> modifyAvatar(File avatar);

    /**
     * 注册
     */
    Observable<BasisResponseEntity> register(
            String mobileNumber, String password, String code, String invitationCode);

    /**
     * 登录
     */
    Observable<LoginUserInfoEntity> login(String mobileNumber, String password);

    /**
     * 更改昵称
     */
    Observable<BasisResponseEntity> alterNickname(String nickname);

    /**
     * 重置登录密码
     */
    Observable<BasisResponseEntity> resetLoginPassword(
            String password, String mobileNumber, String token, String code);

    /**
     * 更改登录密码
     */
    Observable<BasisResponseEntity> alterLoginPassword(
            String oldPassword, String newPassword, String code);

    /**
     * 绑定新的手机号
     */
    Observable<BasisResponseEntity> bindNewMobileNumber(
            String mobileNumber, String prefix, String code);

    /**
     * 绑定邮箱
     */
    Observable<BasisResponseEntity> bindEmail(String email, String code);

    /**
     * 产品列表
     */
    Observable<ProductListEntity> productList();

    /**
     * 产品订单列表
     */
    Observable<ProductOrderListEntity> productOrderList();

    /**
     * 持有产品列表
     */
    Observable<HoldProductListEntity> holdProductList();

    /**
     * 持有产品详情
     */
    Observable<HoldProductDetailsEntity> holdProductDetails(String orderNumber);

    /**
     * 持有产品收益
     */
    Observable<HoldProductProfitDataEntity> holdProductProfitData(String orderNumber);

    /**
     * 清算持有产品
     */
    Observable<BasisResponseEntity> clearHoldProduct(String orderNumber, String code);
}
